#include <iostream>

using namespace std;

class A{
public:
// 03标准
	// 构造函数
	A(){
		cout << "A construct" << endl;
	}
	// copy赋值函数
	A& operator=(const A& rhs){
		cout << "copy assign construct" << endl;
		return *this;
	}
	// copy构造函数
	A(const A &rhs){
		cout << "copy construct" << endl;
	}
	// 析构函数
	~A(){
		cout << "A deconstruct" << endl;
	}
	// 移动赋值函数
	A(A&& a){
		cout << "move construct" << endl;
		// return *this;
	}
	// 移动构造函数
	A& operator=(A&& a){
		cout << "move assign construct" << endl;
		return *this;
	}
};

int main(){
	cout << "a" << endl;
	A a;
	cout << "b" << endl;
	A b;
	cout << "=" << endl; // copy赋值函数
	b = a;
	cout << "===move===" << endl;
	A c = move(a); // 移动赋值函数
	cout << "===move assign===" << endl;
	A&& d = move(b); // 移动构造函数
	
	return 0;
}